/**
 * Clasa Produs se refera la calculul produsului dintre doi termeni
 */
package q10.Operatori;

public class Produs extends Operator {
	
	/**
	 * Metoda calcul(double aux1,double aux2) returneaza valoarea produsului dintre primului argument si cel de-al doilea
	 * @param aux1	aux1/aux2
	 * @param aux2 aux1/aux2
	 * @return double
	 */
	@Override
	public double calcul(double aux1, double aux2) {
		return aux1*aux2;
	}
	
	/**
	 * Metoda calcul(double aux1,double aux2) returneaza valoarea produslui dintre primului argument si cel de-al doilea
	 * Este o metoda statica.
	 * @param aux1	aux1/aux2
	 * @param aux2 aux1/aux2
	 * @return double
	 */
	public static double Calcul(double aux1, double aux2)
    {
        return aux1 * aux2;
    }

	/**Metoda concatTermeni(String aux1, String aux2) concateneaza termenii operatiei de inmultire.
	 * @param aux1	primul termen de concatenat
	 * @param aux2	al doilea termen de concatenat
	 * @return String
	 */
	@Override
	public String concatTermeni(String aux1, String aux2) {
		String aux;
        if (aux1.compareTo("0") == 0 || aux2.compareTo("0") == 0)
        //if (!strcmp(aux1, "0") && !strcmp(aux2, "0"))
            aux = aux1;
        else if (aux1.compareTo("0") == 0) aux = aux2;
        else if (aux2.compareTo("0") == 0 ) aux = aux1;
        else
            aux = aux1 + "*" + aux2;
        return aux;
	}

	/**Metoda concatTermens(String aux1, String aux2) concateneaza termenii operatiei de inmultire.
	 * Este o metoda statica.
	 * @param aux1	primul termen de concatenat
	 * @param aux2	al doilea termen de concatenat
	 * @return String
	 */	
	public static String concatTermens(String aux1, String aux2)
    {
        String aux;
        if (aux1.compareTo("0") == 0 || aux2.compareTo("0") == 0)
        //if (!strcmp(aux1, "0") && !strcmp(aux2, "0"))
            aux = aux1;
        else if (aux1.compareTo("0") == 0) aux = aux2;
        else if (aux2.compareTo("0") == 0 ) aux = aux1;
        else
            aux =  aux1 + "*" + aux2;
        return aux;
    }
	
	/**Metoda calculDerivata returneaza valoarea derivatei produsului.
	 * @return double
	 */
	@Override
	public double calculDerivata() {
		if (fStang==null || fDrept==null)
            System.exit(1);

        return Plus.Calcul(Produs.Calcul(fStang.calculDerivata(), fDrept.calcul()), Produs.Calcul(fStang.calcul(), fDrept.calculDerivata()));    
	}

	/**Metoda derivare() returneaza String-ul rezultat derivarii produsului.
	 * @return String
	 */
	@Override
	public String derivare() {
		if (fStang==null || fDrept==null)
            System.exit(1);

        return concatTermeni(fStang.derivare(), fDrept.derivare());  
	}

}
